
var events = require("events");  // 事件模块(构造函数函数 事件触发器)
// console.log(events);
// console.log(typeof events);

var EventEmmiter = events.EventEmitter;  // 得到它的子类  等价于  class EventEmmiter extends EventEmitter {}   

var o = new EventEmmiter();  // 通过事件触发器得到实例化对象  => 通过该实例化对象,自定义事件(新增事件 删除事件  触发事件)

// console.log(window);
// console.log(document);
// console.log(global);


// 绑定自定义事件,当事件触发时,执行对应的回调函数
// o.addListener(type, callback);  绑定事件
// o.on(type, callback);   绑定事件
// o.once(type, callback);   绑定事件(执行一次就会被清除)
// o.prependListener(type, callback);   绑定事件(放在当前事件队列的最前面,优先执行)


// o.emit(type, params);  对应事件类型触发事件, emit()可以接受第二参数,作为事件触发时传入的数据, 当事件触发时, 事件队列中的回调函数都可以用一个形参接受对应的数据

// list = {classOver:[], classStart:[]}
/* o.addListener("classOver", function (arg) {
    console.log("老王说:要去吃饭", arg);
})

o.on("classOver", function (arg) {
    console.log("张三说:要去吃麻辣烫", arg);
})

o.once("classOver", function (arg) {
    console.log("李四说:肚子疼,要请假!", arg);
})

o.prependListener("classOver", (arg) => {
    console.log("王五说:不吃饭了,我要学习", arg);
}) */

// 触发事件(触发一次)
// o.emit("classOver");
// o.emit("classOver");

// o.emit("classOver", "12:00");
// o.emit("classOver", "18:00");


// 清除自定义事件
// removeListener(type,callback);
// off(type,callback);
// 注意: 清除事件时,对应函数引用清除

// o.removeAllListeners(type) 对应事件类型清除所有事件

var a, b, c, d = null;
a = function (arg) {
    console.log("老王说:要去吃饭", arg);
}
o.addListener("classOver", a);

o.on("classOver", b = function (arg) {
    console.log("张三说:要去吃麻辣烫", arg);
})

o.once("classOver", c = function (arg) {
    console.log("李四说:肚子疼,要请假!", arg);
})

o.prependListener("classOver", d = (arg) => {
    console.log("王五说:不吃饭了,我要学习", arg);
})

o.prependListener("classStart", d = (arg) => {
    console.log("老王说:把眼睛睁开", arg);
})


// o.removeListener("classOver", a)
// o.off("classOver", b)
// o.off("classOver", c)
// o.off("classOver", d)

// o.removeAllListeners("classOver");

// o.emit("classOver", "12:00");

// .eventNames()  返回一个列出触发器已注册监听器的事件的数组。 数组中的值为字符串或符号
// console.log(o.eventNames());

// listenerCount(eventName) 查看绑定事件的个数 eventName为事件名
// console.log(o.listenerCount("classOver"));
// console.log(o.listenerCount("classStart"));

// getMaxListeners()  返回 EventEmitter 当前的最大监听器限制值
console.log(o.getMaxListeners());

// .setMaxListeners(num)  设置单个事件监听绑定函数的数量  默认为10 num为需要修改的上限值,最好一开始就设置.
o.setMaxListeners(100);
console.log(o.getMaxListeners());






